use std::collections::HashMap;

struct Solution {}

fn main() {}

impl Solution {
    pub fn merge_similar_items(items1: Vec<Vec<i32>>, items2: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
        // merge
        let mut map: HashMap<i32, i32> = HashMap::new();
        for item in items1 {
            if map.contains_key(&item[0]) {
                map.insert(item[0].to_owned(), item[1].to_owned() + map.get(&item[0]).unwrap());
                continue;
            }
            map.insert(item[0].to_owned(), item[1].to_owned());
        }
        for item in items2 {
            if map.contains_key(&item[0]) {
                map.insert(item[0].to_owned(), item[1].to_owned() + map.get(&item[0]).unwrap());
                continue;
            }
            map.insert(item[0].to_owned(), item[1].to_owned());
        }

        // sort
        let mut ret: Vec<Vec<i32>> = vec![];
        for x in map {
            let pair = vec![x.0, x.1];
            ret.push(pair);
        }
        ret.sort_by_key(|v| v[0]);

        // return
        ret
    }
}